//链接订单数据库
const orderModel=require('../db/order')
const cartModel=require('../db/cart')
const menuModel=require('../db/menu')

/* 
    orderno:String,//订单号
    time:Date,//下单日期-时间戳
    mode:String,//是否堂食
    menuname:String,//第一个商品的名称
    code:String,//取餐码
    totalprice:String,//总价
    status:String//订单状态
*/

module.exports={
    //获取当前用户全部订单
    getAll:(req,res)=>{
        //获取get请求数据-restful风格用params获取
        let {userid}=req.params
        //在订单数据库中查询当前用户对应的全部订单
        orderModel.find({userid},(err,docs)=>{
            if(err){//查询错误
                throw new Error(err)
            }
            //查询成功
            res.json({
                error_code: 0,
                msg: '获取订单成功！',
                data: docs
            })
        })
    },

    //成功支付后创建新订单
    creat:(req,res)=>{
        //post请求获取数据
        let {ids,mode,totalprice,userid}=req.body
        //ids-购物中id组成的字符串  mode-是否堂食 totalprice-总价 userid-用户名
        ids=ids.split(',')//分割成数组
        console.log(ids)
        //在购物车数据库中查询数组中id对应的购物车数据
          //$in操作符用于选择某个域的值等于其后指定的数组中的任意值的文档。
        cartModel.find({_id:{$in:ids}},(err,docs)=>{
            if(err) {//查询错误
                throw new Error(err)
            }
            //查询成功
            console.log(11111111,docs)//包含购物车对象数据的数组
                /*menuid:String,//商品id
                num:Number,//数量
                speandkind:String,//种类和规格
                userid:String//用户*/
            //从数据中获取到全部商品id-组成数组
            let menuids=docs.map(item=>item.menuid)
            console.log(222222,menuids)
            
            //在商品数据库中查询到数组中商品id对应的所有商品数据
            menuModel.find({_id:{$in:menuids}},(err,docs)=>{
                console.log(7777777777);
                if(err) {
                    throw new Error(err)
                }
                console.log(33333,docs)//数据获取到商品数据对象组成的数组
                    /* name:String,
                    price:Number,
                    imgpath:String,
                    specifications:String,//规格
                    kind:String,//种类
                    enable:{
                        type:Boolean,
                        default:true //默认上架
                    },//当前是否可点
                    catname:String   //分类*/
                //获取第一个商品名称
                if(!docs.length){//数组长度0
                    res.json({
                        error_code: 1,
                        msg: '暂未找到该商品！'
                    })
                    return
                }
                //第一个商品名名字
                let menuname=docs[0].name
                console.log(0000,menuname)
                //生成订单号
                var orderno = +new Date() + Math.floor(Math.random() * 899999) + 100000
                console.log(9999999999,orderno);
                //定义订单状态
                let status='已付款'
                //取餐码--今天的第几个
                //start-今天开始的时间戳 end-今天结束的时间戳
                let now =new Date()
                now.setHours(0)
                now.setMinutes(0)
                now.setSeconds(0)
                now.setMilliseconds(0)
                let start = now.getTime()
                now.setHours(24)
                let end = now.getTime()
                //在订单表数据库中查询，找到今天时间范围内的全部订单数
                orderModel.find({time:{$gt:start,$lt:end}},(err,docs)=>{
                    if(err){
                        throw new Error(err)
                    }
                    //判断查询到的数据数量
                    if(docs.length){
                        //新的取餐码是当前数量+1
                        let code=docs.length+1
                        //补足成四位数字符串
                        if(code<10){
                            code='000'+code
                        }else if(code<100){
                            code='00'+code
                        }else if(code<1000){
                            code='0'+code
                        }
                    }else{//今天没有订单数据，取餐码为1
                        code='0001'
                    }
                })
            })
            //将数据添加到订单表数据库
            orderModel.insertMany({
                orderno,
                mode,
                menuname,
                code,
                totalprice,
                status,
                userid,
                time:+new Date()
            },(err,docs)=>{
                if(err) {
                    throw new Error(err)
                }
                //可以添加的话将ids中的购物车表数据删除
                cartModel.deleteMany({_id:{$in:ids}},(err,docs)=>{
                    if(err) {
                        throw new Error(err)
                    }
                    res.json({
                        error_code: 0,
                        msg: '支付成功！'
                    })
                })
            })

        })
        

    }
}